package cn.opopopo.design_pattern_learn.行为型.interpreter;

import java.util.HashMap;
import java.util.Map;

public class InterpreterPatternDemo {
    public static void main(String[] args) {
        // 构建表达式：(x AND y) OR (NOT x)
        Expression x = new VariableExpression("x");
        Expression y = new VariableExpression("y");

        Expression expr1 = new AndExpression(x, y);           // x AND y
        Expression expr2 = new NotExpression(x);              // NOT x
        Expression finalExpr = new OrExpression(expr1, expr2); // (x AND y) OR (NOT x)

        System.out.println("表达式: " + finalExpr);

        // 设置上下文
        Map<String, Boolean> context = new HashMap<>();
        context.put("x", true);
        context.put("y", false);

        // 解释执行
        boolean result = finalExpr.interpret(context);
        System.out.println("当 x=true, y=false 时，结果: " + result); // true

        // 修改上下文
        context.put("x", false);
        context.put("y", true);
        result = finalExpr.interpret(context);
        System.out.println("当 x=false, y=true 时，结果: " + result); // false
    }
}